﻿Imports Commander_Wars.Spieletools
''' <summary>
''' Erstellt einen vom Spieler erstellten KO.
''' </summary>
''' <remarks></remarks>
<Serializable()> Public Class KOCustom
    Inherits ObjektKO
    <NonSerialized()> Dim CustomID As Integer
    <NonSerialized()> Public KOWerte(2) As Power
    Public Sub New()
        MyBase.New(0, KIGabeEinsatzstellen.RundenAnfang)
    End Sub
    Public Sub New(ByVal Spieler As Integer, ByVal KOID As Integer)
        MyBase.New(Spieler, KIGabeEinsatzstellen.RundenAnfang)
        StartwerteLaden(KOID)
    End Sub
    Public Sub New(ByVal Spieler As Integer, ByVal Gabefüllstand As Integer, ByVal Gabenart As Gabemodi, ByVal neuSternkosten As Integer, ByVal KOID As Integer)
        MyBase.New(Spieler, Gabefüllstand, Gabenart, neuSternkosten, KIGabeEinsatzstellen.RundenAnfang)
        StartwerteLaden(KOID)
    End Sub
    Public Sub StartwerteLaden(ByVal CustomID As Integer)
        Me.CustomID = CustomID
        KOID = Objektverwalter.CustomKOS(CustomID).KOID
        Bild = GetBildID()
        Armee = Objektverwalter.CustomKOS(CustomID).Armee
        Musik = Objektverwalter.CustomKOS(CustomID).Musik
        KOname = Objektverwalter.CustomKOS(CustomID).KOname

        Select Case My.Settings.CommanderWarsGameMoodus
            Case CommanderWarsGameModi.AdvanceWars
                Sternkosten = Objektverwalter.CustomKOS(CustomID).Sternkosten
                Gabekosten = 0
                If Objektverwalter.KOS(Bild).KOBeschreibung.Spezialgabekosten > 0 Then
                    SpezialgabeKosten = 4
                Else
                    SpezialgabeKosten = 0
                End If
                Gaben = Objektverwalter.KOS(Bild).KOBeschreibung.Gaben
                Gaben(1) = Gaben(0)
            Case CommanderWarsGameModi.AdvanceWarsDC
                Sternkosten = 1000
                Gabekosten = 0
                If Objektverwalter.KOS(Bild).KOBeschreibung.Spezialgabekosten > 0 Then
                    SpezialgabeKosten = 6
                Else
                    SpezialgabeKosten = 0
                End If
                Gaben = Objektverwalter.KOS(Bild).KOBeschreibung.Gaben
                KORange = Objektverwalter.CustomKOS(CustomID).KORange
            Case CommanderWarsGameModi.CommanderWars2
                Sternkosten = Objektverwalter.CustomKOS(CustomID).Sternkosten
                Gabekosten = Objektverwalter.KOS(Bild).KOBeschreibung.GabeKosten
                SpezialgabeKosten = Objektverwalter.KOS(Bild).KOBeschreibung.Spezialgabekosten
                Gaben = Objektverwalter.CustomKOS(CustomID).Gaben
                KORange = Objektverwalter.CustomKOS(CustomID).KORange
            Case Else
                Sternkosten = Objektverwalter.CustomKOS(CustomID).Sternkosten
                Gabekosten = Objektverwalter.KOS(Bild).KOBeschreibung.GabeKosten
                SpezialgabeKosten = Objektverwalter.KOS(Bild).KOBeschreibung.Spezialgabekosten
                Gaben = Objektverwalter.CustomKOS(CustomID).Gaben
        End Select
        'Gaben und so laden
        KOWerte = Objektverwalter.CustomKOS(CustomID).KOWerte

        KOLaden()
    End Sub
    ''' <summary>
    ''' Wir laden einen neuen KO.
    ''' </summary>
    ''' <param name="KOFile"></param>
    ''' <remarks></remarks>
    Public Sub StartwerteLaden(ByVal KOFile As String)
        Using Reader As New IO.StreamReader(KOFile, System.Text.Encoding.UTF8, True)
            'Na dann laden wir denn KO mal
            While Not Reader.EndOfStream
                Dim Z As String = Reader.ReadLine.Trim
                If Z.StartsWith("'") Then Continue While
                'Hier lesen wir ein paar Standardwerte aus.

                If Z.ToLower.StartsWith("koname:") Then
                    KOname = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("koid:") Then
                    KOID = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("armee:") Then
                    Armee = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("musik:") Then
                    Musik = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("sternkosten:") Then
                    Sternkosten = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("gabekosten:") Then
                    Gabekosten = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("spezialgabeKosten:") Then
                    SpezialgabeKosten = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("gabenamen:") Then
                    Gaben = Z.Remove(0, Z.IndexOf(":") + 1).Split("|")
                    Continue While
                End If
                If Z.ToLower.StartsWith("korange:") Then
                    KORange = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                'Jetzt die Normallen Fähigkeiten und Gaben
                If Z.ToLower.StartsWith("daytoday") Then
                    KOWerte(0) = New Power(Reader)
                    Continue While
                End If
                If Z.ToLower.StartsWith("copower") Then
                    KOWerte(1) = New Power(Reader)
                    Continue While
                End If
                If Z.ToLower.StartsWith("specialpower") Then
                    KOWerte(2) = New Power(Reader)
                    Continue While
                End If
            End While
        End Using

    End Sub
    Public Overrides Sub KOLaden()
        If KOWerte(0) IsNot Nothing Then
            KOWerte(0).ActivatePower(Me)
        End If
        If My.Settings.CommanderWarsGameMoodus = CommanderWarsGameModi.AdvanceWarsDC Then
            'Dafür sinkt die Feuerkraft aber drastisch
            If WetterReichweitenbonus(0) = -1 Then
                WetterReichweitenbonus(0) = 0
            End If
        End If
    End Sub
    Public Overrides Sub Gabeeinsetzen(Optional ByVal OhneFunktion As Boolean = False)
        If KOWerte(1) IsNot Nothing Then
            KOWerte(1).ActivatePower(Me)
            If Not OhneFunktion Then
                KOWerte(1).ActivateEffect(Me)
            End If
        End If
        GabeEingesetzt()
    End Sub
    Public Overrides Sub SpezialGabeeinsetzen(Optional ByVal OhneFunktion As Boolean = False)
        If My.Settings.CommanderWarsGameMoodus = CommanderWarsGameModi.AdvanceWars Then
            If KOWerte(1) IsNot Nothing Then
                KOWerte(1).ActivatePower(Me)
                If Not OhneFunktion Then
                    KOWerte(1).ActivateEffect(Me)
                End If
            End If
        ElseIf KOWerte(2) IsNot Nothing Then

            KOWerte(2).ActivatePower(Me)
            If Not OhneFunktion Then
                KOWerte(2).ActivateEffect(Me)
            End If
        End If
        GabeEingesetzt()
    End Sub
    Public Overrides Sub KOFrame()
        If KOWerte(0) IsNot Nothing Then
            KOWerte(0).ActivateEffect(Me)
        End If
    End Sub
    ''' <summary>
    ''' Diese Klasse wird benutzt um die KO-Gabe einzusetzen.
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> Public Class Power
#Region "KOFähigkeiten"
        ''' <summary>
        ''' So viel teurer werden Einheiten
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Teurungsrate As Single = 1
        ''' <summary>
        ''' Um so viel werden Truppen auf Gebäuden geheilt
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public GebäudeHeilung As Integer = 2
        ''' <summary>
        ''' So viel können Fernwaffen weiter schießen.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Reichweite As Integer = 0
        ''' <summary>
        ''' Bonus zum Besetzen von Gebäuden
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Besetzer As Single = 0
        ''' <summary>
        ''' Das Glück des KO's
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Glück As Integer = 5
        ''' <summary>
        ''' Das Pech des KO's
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Pech As Integer = 0
        ''' <summary>
        ''' Geld welches man pro Stadt mehr bekommt
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public BonusGeldproGebäude As Integer = 0
        ''' <summary>
        ''' Senkung der Treibstoffkosten in der Luft
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public SpritsenkungLuft As Integer = 0
        ''' <summary>
        ''' Senkung der Treibstoffkosten auf See
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public SpritsenkungSee As Integer = 0
        ''' <summary>
        ''' Um wie viel die Feuerkraft steigt je nach Landschaftsuntergrund
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Dim LandschaftsStärke As Integer = 0
        ''' <summary>
        ''' Eine TerrainID oder "Deckung" erhöht die Feuerkraft je nach LandschaftsStärke
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public LandschaftsUntergrund() As String = {}
        ''' <summary>
        ''' Feuerstärke aller Truppen.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public OffensivStärke As ObjektTabelle = New FeuerkrafttabelleCustomAlles(100)
        ''' <summary>
        ''' Deffensive Stärke aller Truppen.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public DeffensivStärke As ObjektTabelle = New FeuerkrafttabelleCustomAlles(100)
        ''' <summary>
        ''' Wenn true dann werden KP und Ladung versteckt
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Verstecker As Boolean = False
        ''' <summary>
        ''' Um so viel wird die ATK bei einem Wetter erhöht
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Wetterbouns As Integer = 0
        ''' <summary>
        ''' Bei diesem Wetter wird die ATK erhöht um Wetterbonus
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Wetter As ObjektSpielfeld.Wetterarten = ObjektSpielfeld.Wetterarten.Sonne
        ''' <summary>
        ''' Bei diesem Wetter ändern sich die Bewegungspunkte
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Bewegunssenker() As ObjektSpielfeld.Wetterarten = {}
        ''' <summary>
        ''' Auf diesen Wert werden die Bewegungspunkte gesetzt
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Bewegungswetter() As Bewegungsarten = {}
        ''' <summary>
        ''' Um wie viel die Reichweite bei bestimmten Wetterarten sich ändern
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public WetterReichweitenbonus() As Integer = {-1}
        ''' <summary>
        ''' Bei welchem Wetter die Reichweitenänderung stattfindet.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public WetterartfürSenker() As ObjektSpielfeld.Wetterarten = {ObjektSpielfeld.Wetterarten.Sandsturm}
        ''' <summary>
        ''' Der Boost pro Sende Turm
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public SendeTurmStärke As Point = New Point(10, 0)
        ''' <summary>
        ''' Zusatzdeffensive bei Direkt und Indirekten Angriffen
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Zusatzdeffensive As New Point
        ''' <summary>
        ''' Wie schnell sich die Gabeleiste auffüllt
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Gabenfüller As Single = 1
        ''' <summary>
        ''' Für so viel Fonds steigt die Feuerkraft
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Geldstärke As Integer = -10
        ''' <summary>
        ''' Klaut dem Gegner Fonds für jeden Angriff
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Geldraub As Single = -1
        ''' <summary>
        ''' Deckungsänderung pro Stern
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public DeckungsÄnderung As Integer = 1
        ''' <summary>
        ''' Offensiv Erhöhung für Nah-und Fernkämpfer
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Zusatzoffensive As New Point
        ''' <summary>
        ''' Sichtbonus für alle Einheiten
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Sichtbonus As Integer = 0
        ''' <summary>
        ''' Wenn größer Null führen wir einen zweiten Angriff mit n-facher Stärke des Startangriffes aus.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public DoppelAngriff As Single = 0
        ''' <summary>
        ''' Wir nehmen keinen Gegenschaden.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public KeinGegenSchaden As Boolean = False
        ''' <summary>
        ''' Fernwaffen können ziehen und feuern.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public MoveandFire As Boolean = False
        ''' <summary>
        ''' Bonus für Truppen die sich mehr bewegen können.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Bewegungsbonus As BewegungsboniTabelle = New BewegungsboniTabelleCustomAlles(0)
        ''' <summary>
        ''' Bonus für Truppen wenn feinde gesehen werden usw.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Kampfbonus As Kampfboni = Kampfboni.No
        ''' <summary>
        ''' Bonus pro Truppe die den Kampfbonus erfüllt.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public StärkebonusproEinheit As Integer = 0
        ''' <summary>
        ''' Truppen haben KP+Kampfverstärker Angriffskraft.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Kampfverstärker As Integer = 0
        ''' <summary>
        ''' Wenn größer Null kann man nur noch einen N-Ten Bruchteil des Lebens abziehen.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Maximalschaden As Single = -1
        ''' <summary>
        ''' Fernwaffen können Feuern und ziehen
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public FireandMove As Boolean = False
        ''' <summary>
        ''' Mit dieser Zahl wird der KOnterschaden multipliziert
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public GegenFeuerkraft As Single = 1
        ''' <summary>
        ''' Wenn größer Null entzieht man dem Gegner Leben
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Lebensentzug As Single = 0
        ''' <summary>
        ''' Wenn true kann man auch die Komma Zahl des Lebens sehen
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public GenauesLebenAnzeigen As Boolean = False
        ''' <summary>
        ''' Einheiten können nach ihrem Bau ziehen.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public NachBauZiehen As Boolean = False
        ''' <summary>
        ''' Der erste Punkt bedeutet die Feuerkraftsteigerung, wenn Gruppen von X Einheiten oder mehr Angegriffen werden und eine Steigerung um Y.
        ''' Der zweite Punkt bedeutet die Feuerkraftsteigerung, wenn Gruppen von X Einheiten oder weniger Angegriffen werden und eine Feuerkraftsteigerung um Y.
        ''' Der Radius sind immer 3 Felder.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public GruppenBoost As Point() = {New Point(0, 0), New Point(0, 0)}
        ''' <summary>
        ''' X=ATK Steigerung Y Radius wie weit man vom Berg weg sein darf, kann
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Bergbonus As Point = New Point(0, 0)
        ''' <summary>
        ''' Wenn wir Schaden nehmen bekommen wir etwas Geld zurück.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public GeldFürEigenSchaden As Single = 0
        ''' <summary>
        ''' Wenn True dann kann man immer in Wälder und Riffe schauen.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public RiffWaldSchauer As Boolean = False
        ''' <summary>
        ''' Wenn Einkommen größer Fonds verliert man die Werte, wenn größer gewinnt man sie für jede 10%
        ''' X=ATK Y=Kosten.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public ATKundKostensteigererfürFonds As Point = New Point(0, 0)
        ''' <summary>
        ''' Umso viel wird für jede Mine die Produktionskosten gesenkt.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Minenstärke As Single = 0.05#
        ''' <summary>
        ''' Wenn ungleich 0 dann nimmt der Gegner Schaden wenn wir angegriffen wurden umso mehr Schaden wir erlitten haben.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public ErhöhterGegenschadenbeiEigenSchaden As Single = 0
        ''' <summary>
        ''' Wenn true können die eigenen Truppen nur von Einheiten die gleich viel oder mehr gekostet haben Angegriffen werden.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public KeinAngriffmitBilligerenTruppen As Boolean = False
        ''' <summary>
        ''' Wenn true dann haben wir maximales Glück wenn der Gegner dadurch zerstört würde.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public MaxGlückbeiZerstörung As Boolean = False
        ''' <summary>
        ''' Je weniger TP umso schlechter kämpfen wir.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public ZusätlicheKampfschwächeproTP As Integer = 0
        ''' <summary>
        ''' Wenn true hat man immer Maximales Glück.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public ImmerMaxGlück As Boolean = False
        ''' <summary>
        ''' Umso viel steigt der Angriff bei Angriffen auf eine bestimmte Landschaft
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public AufLandschaftsStärke As Integer = 0
        ''' <summary>
        ''' Die Landschaften auf die man schießen muss.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public AufLandschaftsUntergrund() As String = {}
        ''' <summary>
        ''' Wir richten immer so viel mehr Schaden aus.LOL.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public FesterZusatzschadenUndDeffensive As New Point(0, 0)
        ''' <summary>
        ''' Der Spieler verdient so viel Geld mehr oder weniger.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public MehrEinkommen As Single = 0
        ''' <summary>
        ''' Für jede Deckung unseres Gegner sind wir so viel stärker.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public FeuerstärkeproFeindlicherDeckung As Integer = 0
        ''' <summary>
        ''' Wenn die TP des Gegner kleiner sind als die eigenen kämpfen die Truppen besser.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public ATKHochfürSchwacheGegner As Single = 0
        ''' <summary>
        ''' Die Bewegungskosten auf diesen Feldern ist.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public NeueBewegungskosten As Integer() = {}
        ''' <summary>
        ''' Auf dieser Landschaft sind die Bewegungskosten X
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public BewegungskostenUntergrund As String() = {}
        ''' <summary>
        ''' Wenn der Schaden größer X ist fliegt die Einheit Y Felder weg.=) und nimmt dabei Schaden
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Schadensflug As New Point(0, 0)
        ''' <summary>
        ''' Wenn unser Feind so wenig TP hat oder weniger dann wird er gelähmt
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Lähmschaden As Integer = -1
        ''' <summary>
        ''' Wenn unsere Einheit überlebt bekommen wir am Kampfende so viel TP zurück wenn wir zerstört werden nimmt unser Gegner so viel Schaden.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public KampfSchadenHeilung As Integer = 0
        ''' <summary>
        ''' Wir erhalten eine Zusatzdeffensive Y und Zusatzoffensive X wenn wir einen Feind zerstören.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public ATKDEFBoostdurchZerstörung As New Point(0, 0)
        ''' <summary>
        ''' Eine zufällige Einheit erhält Y Bewegungspunkte und X ATK Boost
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public AnyUnitKampfverstärker As New Point(0, 0)
        ''' <summary>
        ''' Wenn ungleich Null erhäht sich die ATK um den Wert und die Einheit kann noch mal ziehen.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public NochMalZiehenUndKampfänderNachZerstörung As Integer = 0
        ''' <summary>
        ''' Wenn True erhalten Feinde keine Infos über die Gabeleiste
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public GabeleistenVerstecker As Boolean = False
        ''' <summary>
        ''' Wenn True machen wir einen Angriff wenn wir in eine Falle laufen.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public FallenAngriff As Boolean = False
        ''' <summary>
        ''' Wenn True können Gegner keine Einsicht in die Fonds nehmen
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public KeineFondsInfos As Boolean = False
        ''' <summary>
        ''' Wenn True können angegriffene Truppen sich in der nächsten Runde nicht reparieren
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public ReperaturVerbotNachKampf As Boolean = False
        ''' <summary>
        ''' Wenn kleiner Null wird die Besetzungszahl eines Gebäudes gesenkt, wenn eine Einheit drauf vernichtet wird.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public BesetzungsbonusNachEinheitenZerstörung As Integer = 0
        ''' <summary>
        ''' X Gibt an auf welchen Wert Wenn Y=1 dann Eigene, wenn Y=2 dann Feind bei Y=0 nichts
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public BewegungsKostenÄnderungNachZerstörung As Point = New Point(0, 0)
        ''' <summary>
        ''' Diese Einheiten kosten mehr oder weniger.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public BonusEinheiten() As StringUndZahl = {}
        ''' <summary>
        ''' X=Stärke Y=Schaden für den jeweils Stärke verursacht wird.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public RadioaktiveStärke As Point = New Point(0, 0)
        ''' <summary>
        ''' Gibt zurück wie viele Felder wir maximal Laufen können damit wir eine Feldtarnung erhalten
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public FeldtarnungsReichweite As Integer = -1
        ''' <summary>
        ''' Landschaften in der ersten Dimension bekommen die Bewegungskosten der Landschaft in der 2 Dimension.
        ''' Olaf Schnee in Ebene verwandeln.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public LandschaftsVertauschung(,) As String = {}
        ''' <summary>
        ''' Nahkampf Einheiten erhalten einen Fernkampf. Außer Bomber und Zeppelin
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public NahkampfReichweitenBonus As Integer = 0
        ''' <summary>
        ''' Welche Gebäude unsere Truppen reparieren.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public RepairON As ReperaturGebäude = ReperaturGebäude.Own
        ''' <summary>
        ''' Sagt auf jeden Gebäude der KO bauen kann.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Baugebäude As ReperaturGebäude = ReperaturGebäude.Own
        ''' <summary>
        ''' Wenn false verliert der KO keine Feuerkraft wenn die TP sinken.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public FeuerVerlustbeiKP As Boolean = True
        ''' <summary>
        ''' Gebäude Heilen und richten mehr Schaden an wenn größer Null
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public GebäudeZusatzSchaden As Integer = 0
        ''' <summary>
        ''' Wenn true werden alle Sprites zu Infis und der Schaden wird falsch angezeigt.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public SpriteVertauschung As Boolean = False
        ''' <summary>
        ''' Bei diesem Wetter sind die Truppen ohne Auswirkung.
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public Wetterimmunität As ObjektSpielfeld.Wetterarten() = {}
        ''' <summary>
        ''' Power Script for this CO
        ''' </summary>
        ''' <remarks></remarks>
        <NonSerialized()> Public ThisPowerScript As PowerScript
#End Region
        Public Sub New(ByRef Reader As IO.StreamReader)
            While Not Reader.EndOfStream
                Dim Z As String = Reader.ReadLine.Trim
                If Z.StartsWith("'") Then Continue While
                If Z.ToLower.StartsWith("powerende") Then
                    Exit While
                End If
                If Z.ToLower.StartsWith("teurungsrate:") Then
                    Teurungsrate = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("gebäudeheilung:") Then
                    GebäudeHeilung = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("reichweite:") Then
                    Reichweite = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("besetzer:") Then
                    Besetzer = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("glück:") Then
                    Glück = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("pech:") Then
                    Pech = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("bonusgeldprogebäude:") Then
                    BonusGeldproGebäude = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("spritsenkungluft:") Then
                    SpritsenkungLuft = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("Spritsenkungsee:") Then
                    SpritsenkungSee = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("landschaftsstärke:") Then
                    LandschaftsStärke = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("landschaftsuntergrund:") Then
                    LandschaftsUntergrund = Z.Remove(0, Z.IndexOf(":") + 1).Split("|")
                    Continue While
                End If
                If Z.ToLower.StartsWith("offensivstärke:") Then
                    OffensivStärke = LoadAngriffsTabelle(Z.Remove(0, Z.IndexOf(":") + 1).Split("|"))
                    Continue While
                End If
                If Z.ToLower.StartsWith("deffensivstärke:") Then
                    DeffensivStärke = LoadAngriffsTabelle(Z.Remove(0, Z.IndexOf(":") + 1).Split("|"))
                    Continue While
                End If
                If Z.ToLower.StartsWith("verstecker:") Then
                    Verstecker = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("wetterbonus:") Then
                    Wetterbouns = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("wetter:") Then
                    Wetter = [Enum].Parse(ObjektSpielfeld.Wetterarten.Regen.GetType, Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("bewegungssenker:") Then
                    Bewegunssenker = ToIntArry(Z.Remove(0, Z.IndexOf(":") + 1).Split("|"))
                    Continue While
                End If
                If Z.ToLower.StartsWith("bewegungswetter:") Then
                    Bewegungswetter = ToIntArry(Z.Remove(0, Z.IndexOf(":") + 1).Split("|"))
                    Continue While
                End If
                If Z.ToLower.StartsWith("wetterreichweitenbonus:") Then
                    Bewegungswetter = ToIntArry(Z.Remove(0, Z.IndexOf(":") + 1).Split("|"))
                    Continue While
                End If
                If Z.ToLower.StartsWith("wetterartfürsenker:") Then
                    Bewegungswetter = ToIntArry(Z.Remove(0, Z.IndexOf(":") + 1).Split("|"))
                    Continue While
                End If
                If Z.ToLower.StartsWith("sendeturmstärke:") Then
                    SendeTurmStärke = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("zusatzdeffensive:") Then
                    Zusatzdeffensive = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("gabenfüller:") Then
                    Gabenfüller = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("geldraub:") Then
                    Geldraub = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("geldstärke:") Then
                    Geldstärke = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("deckungsänderung:") Then
                    DeckungsÄnderung = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("zusatzoffensive:") Then
                    Zusatzoffensive = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("moveandfire:") Then
                    MoveandFire = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("sichtbonus:") Then
                    Sichtbonus = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("doppelangriff:") Then
                    DoppelAngriff = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("keingegenschaden:") Then
                    KeinGegenSchaden = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("kampfbonus:") Then
                    Kampfbonus = [Enum].Parse(ObjektKO.Kampfboni.No.GetType, Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("stärkebonusproeinheit:") Then
                    StärkebonusproEinheit = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("bewegungsbonus:") Then
                    Bewegungsbonus = LoadBewegungsTabelle(Z.Remove(0, Z.IndexOf(":") + 1).Split("|"))
                    Continue While
                End If
                If Z.ToLower.StartsWith("kampfverstärker:") Then
                    Kampfverstärker = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("fireandmove:") Then
                    FireandMove = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("maximalschaden:") Then
                    Maximalschaden = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("gegenfeuerkraft:") Then
                    GegenFeuerkraft = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("lebensentzug:") Then
                    Lebensentzug = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("genaueslebenanzeigen:") Then
                    GenauesLebenAnzeigen = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("nachbauziehen:") Then
                    NachBauZiehen = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("bergbonus:") Then
                    Bergbonus = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("gruppenboost:") Then
                    Dim S() As String = Z.Remove(0, Z.IndexOf(":") + 1).Split("|")
                    GruppenBoost = New Point() {CPoint(S(0)), CPoint(S(1))}
                    Continue While
                End If
                If Z.ToLower.StartsWith("riffwaldschauer:") Then
                    RiffWaldSchauer = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("geldfüreigenschaden:") Then
                    GeldFürEigenSchaden = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("minenstärke:") Then
                    Minenstärke = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("erhöhtergegenschadenbeieigenschaden:") Then
                    ErhöhterGegenschadenbeiEigenSchaden = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("atkdefboostdurchZerstörung:") Then
                    ATKundKostensteigererfürFonds = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("keinangriffmitbilligerentruppen:") Then
                    KeinAngriffmitBilligerenTruppen = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("maxglückbeizerstörung:") Then
                    MaxGlückbeiZerstörung = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("zusätlichekampfschwächeprotp:") Then
                    ZusätlicheKampfschwächeproTP = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("immermaxglück:") Then
                    ImmerMaxGlück = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("auflandschaftsstärke:") Then
                    AufLandschaftsStärke = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("auflandschaftsuntergrund:") Then
                    AufLandschaftsUntergrund = Z.Remove(0, Z.IndexOf(":") + 1).Split("|")
                    Continue While
                End If
                If Z.ToLower.StartsWith("festerzusatzschadenunddeffensive:") Then
                    FesterZusatzschadenUndDeffensive = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("mehreinkommen:") Then
                    MehrEinkommen = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("feuerstärkeprofeindlicherdeckung:") Then
                    FeuerstärkeproFeindlicherDeckung = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("atkhochfürschwachegegner:") Then
                    ATKHochfürSchwacheGegner = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("neuebewegungskosten:") Then
                    NeueBewegungskosten = ToIntArry(Z.Remove(0, Z.IndexOf(":") + 1).Split("|"))
                    Continue While
                End If
                If Z.ToLower.StartsWith("bewegungskostenuntergrund:") Then
                    BewegungskostenUntergrund = Z.Remove(0, Z.IndexOf(":") + 1).Split("|")
                    Continue While
                End If
                If Z.ToLower.StartsWith("schadensflug:") Then
                    Schadensflug = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("lähmschaden:") Then
                    Lähmschaden = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("kampfschadenheilung:") Then
                    KampfSchadenHeilung = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("atkdefboostdurchzerstörung:") Then
                    ATKDEFBoostdurchZerstörung = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("anyunitkampfverstärker:") Then
                    AnyUnitKampfverstärker = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("nochmalziehenundkampfändernachzerstörung:") Then
                    NochMalZiehenUndKampfänderNachZerstörung = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("gabeleistenverstecker:") Then
                    GabeleistenVerstecker = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("fallenangriff:") Then
                    FallenAngriff = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("keinefondsinfos:") Then
                    KeineFondsInfos = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("reperaturverbotnachkampf:") Then
                    ReperaturVerbotNachKampf = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("besetzungsbonusnacheinheitenzerstörung:") Then
                    BesetzungsbonusNachEinheitenZerstörung = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("bewegungskostenänderungnachzerstörung:") Then
                    BewegungsKostenÄnderungNachZerstörung = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("bonuseinheiten:") Then
                    Dim S As String() = Z.Remove(0, Z.IndexOf(":") + 1).Split("|")
                    If S(0) <> "" And S.Length > 1 Then
                        Array.Resize(BonusEinheiten, S.Length)
                        For I = 0 To S.Length - 1
                            BonusEinheiten(I) = New ObjektKO.StringUndZahl(S(I).Split("_"))
                        Next
                    End If
                    Continue While
                End If
                If Z.ToLower.StartsWith("radioaktivestärke:") Then
                    RadioaktiveStärke = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("feldtarnungsreichweite:") Then
                    FeldtarnungsReichweite = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("landschaftsvertauschung:") Then
                    Dim S() As String = Z.Remove(0, Z.IndexOf(":") + 1).Split("|")
                    If S(0) <> "" And S.Length > 1 Then
                        ReDim LandschaftsVertauschung(S.Length - 1, 0)
                        For I = 0 To S.Length - 1
                            LandschaftsVertauschung(I, 0) = S(I).Split("_")(0)
                            LandschaftsVertauschung(I, 1) = S(I).Split("_")(1)
                        Next
                    End If
                    Continue While
                End If
                If Z.ToLower.StartsWith("nahkampfreichweitenbonus:") Then
                    NahkampfReichweitenBonus = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("repairon:") Then
                    RepairON = [Enum].Parse(ObjektKO.ReperaturGebäude.Own.GetType, Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("baugebäude:") Then
                    Baugebäude = [Enum].Parse(ObjektKO.ReperaturGebäude.Own.GetType, Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("feuerverlustbeikp:") Then
                    FeuerVerlustbeiKP = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("gebäudezusatzschaden:") Then
                    GebäudeZusatzSchaden = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("spritevertauschung:") Then
                    SpriteVertauschung = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("wetterimmunität:") Then
                    Wetterimmunität = ToIntArry(Z.Remove(0, Z.IndexOf(":") + 1).Split("|"))
                    Continue While
                End If
                If Z.ToLower.StartsWith("scriptstart") Then
                    ThisPowerScript = New PowerScript(Reader)
                    Continue While
                End If
            End While
        End Sub
        Public Sub New()
        End Sub
        ''' <summary>
        ''' Aktiviert die KO-Power, der KO-Verweis bekommt also entsprechende Werte
        ''' </summary>
        ''' <remarks></remarks>
        Public Sub ActivatePower(ByVal KO As ObjektKO)
            KO.Teurungsrate = Teurungsrate
            KO.GebäudeHeilung = GebäudeHeilung
            KO.Reichweite = Reichweite
            KO.Besetzer = Besetzer
            KO.Glück = Glück
            KO.Pech = Pech
            KO.BonusGeldproGebäude = BonusGeldproGebäude
            KO.SpritsenkungLuft = SpritsenkungLuft
            KO.SpritsenkungSee = SpritsenkungSee
            KO.LandschaftsStärke = LandschaftsStärke
            KO.LandschaftsUntergrund = LandschaftsUntergrund
            KO.OffensivStärke = OffensivStärke
            KO.DeffensivStärke = DeffensivStärke
            KO.Verstecker = Verstecker
            KO.Wetterbouns = Wetterbouns
            KO.Wetter = Wetter
            KO.Bewegunssenker = Bewegunssenker
            KO.Bewegungswetter = Bewegungswetter
            KO.WetterReichweitenbonus = WetterReichweitenbonus
            KO.WetterartfürSenker = WetterartfürSenker
            KO.SendeTurmStärke = SendeTurmStärke
            KO.Zusatzdeffensive = Zusatzdeffensive
            KO.Gabenfüller = Gabenfüller
            KO.Geldstärke = Geldstärke
            KO.Geldraub = Geldraub
            KO.Zusatzoffensive = Zusatzoffensive
            KO.DeckungsÄnderung = DeckungsÄnderung
            KO.KeinGegenSchaden = KeinGegenSchaden
            KO.DoppelAngriff = DoppelAngriff
            KO.Sichtbonus = Sichtbonus
            KO.MoveandFire = MoveandFire
            KO.Bewegungsbonus = Bewegungsbonus
            KO.Kampfbonus = Kampfbonus
            KO.StärkebonusproEinheit = StärkebonusproEinheit
            KO.Kampfverstärker = Kampfverstärker
            KO.FireandMove = FireandMove
            KO.Maximalschaden = Maximalschaden
            KO.GenauesLebenAnzeigen = GenauesLebenAnzeigen
            KO.GegenFeuerkraft = GegenFeuerkraft
            KO.Lebensentzug = Lebensentzug
            KO.NachBauZiehen = NachBauZiehen
            KO.Bergbonus = Bergbonus
            KO.GruppenBoost = GruppenBoost
            KO.RiffWaldSchauer = RiffWaldSchauer
            KO.GeldFürEigenSchaden = GeldFürEigenSchaden
            KO.ATKundKostensteigererfürFonds = ATKundKostensteigererfürFonds
            KO.Minenstärke = Minenstärke
            KO.ErhöhterGegenschadenbeiEigenSchaden = ErhöhterGegenschadenbeiEigenSchaden
            KO.ZusätlicheKampfschwächeproTP = ZusätlicheKampfschwächeproTP
            KO.MaxGlückbeiZerstörung = MaxGlückbeiZerstörung
            KO.KeinAngriffmitBilligerenTruppen = KeinAngriffmitBilligerenTruppen
            KO.ImmerMaxGlück = ImmerMaxGlück
            KO.AufLandschaftsStärke = AufLandschaftsStärke
            KO.AufLandschaftsUntergrund = AufLandschaftsUntergrund
            KO.FesterZusatzschadenUndDeffensive = FesterZusatzschadenUndDeffensive
            KO.MehrEinkommen = MehrEinkommen
            KO.FeuerstärkeproFeindlicherDeckung = FeuerstärkeproFeindlicherDeckung
            KO.ATKHochfürSchwacheGegner = ATKHochfürSchwacheGegner
            KO.NeueBewegungskosten = NeueBewegungskosten
            KO.BewegungskostenUntergrund = BewegungskostenUntergrund
            KO.KampfSchadenHeilung = KampfSchadenHeilung
            KO.Schadensflug = Schadensflug
            KO.Lähmschaden = Lähmschaden
            KO.AnyUnitKampfverstärker = AnyUnitKampfverstärker
            KO.ATKDEFBoostdurchZerstörung = ATKDEFBoostdurchZerstörung
            KO.NochMalZiehenUndKampfänderNachZerstörung = NochMalZiehenUndKampfänderNachZerstörung
            KO.KeineFondsInfos = KeineFondsInfos
            KO.FallenAngriff = FallenAngriff
            KO.GabeleistenVerstecker = GabeleistenVerstecker
            KO.BewegungsKostenÄnderungNachZerstörung = BewegungsKostenÄnderungNachZerstörung
            KO.ReperaturVerbotNachKampf = ReperaturVerbotNachKampf
            KO.BesetzungsbonusNachEinheitenZerstörung = BesetzungsbonusNachEinheitenZerstörung
            KO.BonusEinheiten = BonusEinheiten
            KO.RadioaktiveStärke = RadioaktiveStärke
            KO.FeldtarnungsReichweite = FeldtarnungsReichweite
            KO.LandschaftsVertauschung = LandschaftsVertauschung
            KO.NahkampfReichweitenBonus = NahkampfReichweitenBonus
            KO.FeuerVerlustbeiKP = FeuerVerlustbeiKP
            KO.Baugebäude = Baugebäude
            KO.RepairON = RepairON
            KO.GebäudeZusatzSchaden = GebäudeZusatzSchaden
            KO.SpriteVertauschung = SpriteVertauschung
            KO.Wetterimmunität = Wetterimmunität

        End Sub
        Public Sub ActivateEffect(ByVal KO As ObjektKO)
            If ThisPowerScript IsNot Nothing Then
                ThisPowerScript.Acivate(KO)
            End If
        End Sub
        Public Function LoadAngriffsTabelle(ByVal Z() As String) As Angriffstabelle
            Select Case Z(0).ToLower
                Case "alles"
                    Return New FeuerkrafttabelleCustomAlles(Z(1))
                Case "seeluftboden"
                    Return New FeuerkrafttabelleCustomSeeOffLuftOff(Z(1), Z(2), Z(3))
                Case "fernkampf"
                    Return New FeuerkrafttabelleCustomFernkampf(Z(1), Z(2))
                Case "nahkampf"
                    Return New FeuerkrafttabelleCustomNahkampf(Z(1), Z(2), Z(3))
                Case "helis"
                    Return New FeuerkrafttabelleCustomHelis(Z(1), Z(2), Z(3), Z(4))
                Case "infantrie"
                    Return New FeuerkrafttabelleCustomINF(Z(1), Z(2), Z(3))
                Case Else
                    Return New FeuerkrafttabelleCustomAlles(Z(1))
            End Select
        End Function
        Public Function LoadBewegungsTabelle(ByVal Z() As String) As BewegungsboniTabelle
            Select Case Z(0).ToLower
                Case "alles"
                    Return New BewegungsboniTabelleCustomAlles(Z(1))
                Case "fernpanzer"
                    Return New BewegungsboniTabelleCustomFern_Panzer(Z(1))
                Case "hovercraft"
                    Return New BewegungsboniTabelleCustomHovercraft(Z(1))
                Case "inf"
                    Return New BewegungsboniTabelleCustomINF(Z(1))
                Case "see"
                    Return New BewegungsboniTabelleCustomSee(Z(1))
                Case "transport"
                    Return New BewegungsboniTabelleCustomTransporter(Z(1))
                Case "nahkampf"
                    Return New BewegungsboniTabelleCustomNahkampf(Z(1))
                Case "panzer"
                    Return New BewegungsboniTabelleCustomPanzer(Z(1))
                Case Else
                    Return New BewegungsboniTabelleCustomAlles(Z(1))
            End Select
        End Function
        Public Class PowerScript
            Public Effects As New List(Of Effect)
            Public Sub New()
            End Sub
            Public Sub New(ByVal StrR As IO.StreamReader)
                While Not StrR.EndOfStream
                    Dim S As String = StrR.ReadLine
                    If S.StartsWith("'") Then Continue While
                    If S.ToLower.StartsWith("scriptend") Then
                        Exit Sub
                    End If
                    If S.ToLower.StartsWith("besetzungsrestart") Then
                        Effects.Add(New EffectCaptureRestart)
                    End If
                    If S.ToLower.StartsWith("halbeseinkommen") Then
                        Effects.Add(New EffectGetHalfIncome)
                    End If
                    If S.ToLower.StartsWith("halbesgeld") Then
                        Effects.Add(New EffectGetHalfMoney)
                    End If
                    If S.ToLower.StartsWith("keineinkommen") Then
                        Effects.Add(New EffectNoIncome)
                    End If
                    If S.ToLower.StartsWith("neutralmachen:") Then
                        Effects.Add(New EffectMakeNeutral(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith("neutralesgeld:") Then
                        Effects.Add(New EffectGetNeutralMoney(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith("massenschaden:") Then
                        Dim Data() As String = S.Split(":")
                        Effects.Add(New EffectMassDamage(Data(2), [Enum].GetName(EffectMassDamage.DamageUnit.Own.GetType, Data(1))))
                    End If
                    If S.ToLower.StartsWith("massenschadenlähmung:") Then
                        Dim Data() As String = S.Split(":")
                        Effects.Add(New EffectMassDamageMoveStop(Data(2), Data(1)))
                    End If
                    If S.ToLower.StartsWith("gebäudeerschaffen:") Then
                        Effects.Add(New EffectCreateBuilding(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith("gebäudenochmalschießen") Then
                        Effects.Add(New EffectFireAgain)
                    End If
                    If S.ToLower.StartsWith("stadtübernehmen") Then
                        Effects.Add(New EffectGetEnemyBuilding(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith("gelderhöhen:") Then
                        Effects.Add(New EffectIncreaseOwnFonds(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith("ration") Then
                        Effects.Add(New EffectRation)
                    End If
                    If S.ToLower.StartsWith("wetterändern:") Then
                        Dim Data As String() = S.Split(":")
                        Effects.Add(New EffectChangeWeather([Enum].GetName(ObjektSpielfeld.Wetterarten.Regen.GetType, Data(1)), Data(2)))
                    End If
                    If S.ToLower.StartsWith("rakete:") Then
                        Dim Data As String() = S.Split(":")
                        Effects.Add(New EffectRocket(Data(1), Data(2), Data(3), [Enum].GetName(ObjektKO.Effekte.Keiner.GetType, Data(4)), Data(5)))
                    End If
                    If S.ToLower.StartsWith("heilenkozone:") Then
                        Effects.Add(New EffectHealCORange(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith("treibmunistehlen:") Then
                        Dim Data As String() = S.Split(":")
                        Effects.Add(New EffectStealAmmoFuel(Data(1), Data(2)))
                    End If
                    If S.ToLower.StartsWith("nochmalziehen") Then
                        Effects.Add(New EffectMoveAgain)
                    End If
                    If S.ToLower.StartsWith("stadtbauen") Then
                        Effects.Add(New EffectTownProduction)
                    End If
                    If S.ToLower.StartsWith("höherebewegungskosten:") Then
                        Effects.Add(New EffectIncreaseMovementCosts(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith("zusatzangriffe") Then
                        Effects.Add(New EffectDoubleAttack)
                    End If
                    If S.ToLower.StartsWith("schock:") Then
                        Effects.Add(New EffectShockEnemys(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith("invasion:") Then
                        Effects.Add(New EffectInvasion(S.Split(":")(1).Split("_")))
                    End If
                    If S.ToLower.StartsWith("keintruppenbau") Then
                        Effects.Add(New EffectNoProduction)
                    End If
                    If S.ToLower.StartsWith("keineration:") Then
                        Effects.Add(New EffectNoRation(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith("anderedeckung:") Then
                        Effects.Add(New EffectOtherDeffence(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith("gabenraub:") Then
                        Effects.Add(New EffectStealPower(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith("fallschrimspringer:") Then
                        Dim Data As String() = S.Split(":")
                        Effects.Add(New EffectParatroopers(Data(1), Data(2), Data(3)))
                    End If
                    If S.ToLower.StartsWith("besetzungsniedergang:") Then
                        Effects.Add(New EffectCaptureDown(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith("geldheilung:") Then
                        Dim Data As String() = S.Split(":")
                        Effects.Add(New EffectMoneyhealing(Data(1), Data(2)))
                    End If
                    If S.ToLower.StartsWith("lebensabrundung") Then
                        Effects.Add(New EffectLifeDown)
                    End If
                    If S.ToLower.StartsWith("keintpsehungeigene") Then
                        Effects.Add(New EffectNoOwnLifePoints)
                    End If
                    If S.ToLower.StartsWith("keintpsehungfeinde") Then
                        Effects.Add(New EffectNoEnemyLifePoints)
                    End If
                    If S.ToLower.StartsWith("keinangriffaußerinfanterie") Then
                        Effects.Add(New EffectOnlyInfiAttack)
                    End If
                    If S.ToLower.StartsWith("keingabeeinsatz") Then
                        Effects.Add(New EffectNoPower)
                    End If
                    If S.ToLower.StartsWith("activatekriegsnebel:") Then
                        Effects.Add(New EffectActiveFogOfWar(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith("setenemyvisionrange:") Then
                        Effects.Add(New EffectSetEnemyVisionRange(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith("setenemyluckandcurse:") Then
                        Dim Data As String() = S.Split(":")
                        Effects.Add(New EffectSetEnemyLuckandCurse(Data(1), Data(2)))
                    End If
                    If S.ToLower.StartsWith("keingabeleisteauffüllung") Then
                        Effects.Add(New EffectNoPowerCharge)
                    End If
                    If S.ToLower.StartsWith("wenigereinahmendurchbesetzungszahl:") Then
                        Effects.Add(New EffectMoneyForCapturePoints(S.Split(":")(1)))
                    End If
                End While
            End Sub
            Public Sub Acivate(ByVal KO As ObjektKO)
                For Each E In Effects
                    If E IsNot Nothing Then
                        E.Activate(KO)
                    End If
                Next
            End Sub
            Public Sub WritePowerScript(ByVal StrR As IO.StreamWriter)
                StrR.WriteLine("ScriptStart")
                For Each E In Effects
                    E.ToString()
                Next
                StrR.WriteLine("ScriptEnd")
            End Sub
            Public MustInherit Class Effect
                Implements ICloneable
                Public MustOverride Sub Activate(ByVal KO As ObjektKO)
                Public MustOverride Function ValueNumbers() As Integer

                Public Overridable Function Clone() As Object Implements System.ICloneable.Clone
                    If TypeOf Me Is EffectInvasion Then
                        Dim K As EffectInvasion = Me.Clone
                        Dim M As EffectInvasion = Me
                        ReDim K.Invasion(M.Invasion.Length - 1)
                        For I = 0 To K.Invasion.Length - 1
                            K.Invasion(I) = M.Invasion(I)
                        Next
                        Return K
                    Else
                        Return Me.Clone
                    End If
                End Function
            End Class
            Public Class EffectCaptureRestart
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.RestartBesetzungen()
                End Sub
                Public Overrides Function ToString() As String
                    Return "BesetzungsRestart"
                End Function

                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectGetHalfMoney
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.GetHalfMoney()
                End Sub
                Public Overrides Function ToString() As String
                    Return "HalbesEinkommen"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectNoIncome
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Keineinkommen()
                End Sub
                Public Overrides Function ToString() As String
                    Return "KeinEinkommen"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectMakeNeutral
                Inherits Effect
                Dim CapturePoints As Integer
                Public Sub New(ByVal CapturePoints As Integer)
                    Me.CapturePoints = CapturePoints
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.NeutraleBesetzungMachen(CapturePoints)
                End Sub
                Public Overrides Function ToString() As String
                    Return "NeutralMachen:" + CapturePoints.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectGetNeutralMoney
                Inherits Effect
                Dim Money As Integer
                Public Sub New(ByVal Money As Integer)
                    Me.Money = Money
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.GetNeutralesGeld(Money)
                End Sub
                Public Overrides Function ToString() As String
                    Return "NeutralesGeld:" + Money.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectMassDamage
                Inherits Effect
                Enum DamageUnit
                    Own
                    OwnBuildings
                    TownDamage
                    AllEnemies
                    Nature
                    Bombs
                End Enum
                Dim Damage As Integer
                Dim DamageUnits As DamageUnit
                Public Sub New(ByVal Damage As Integer, ByVal DamageUnits As DamageUnit)
                    Me.Damage = Damage
                    Me.DamageUnits = DamageUnits
                End Sub

                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    Select Case DamageUnits
                        Case DamageUnit.Own
                            KO.EigeneEinheitenHeilen(Damage)
                        Case DamageUnit.OwnBuildings
                            KO.HealBuildings(Damage)
                        Case DamageUnit.TownDamage
                            KO.Stadtschaden(Damage)
                        Case DamageUnit.AllEnemies
                            KO.AlleFeindeBeschädigen(Damage)
                        Case DamageUnit.Nature
                            If Damage > 0 Then
                                KO.NaturGift(Damage)
                            Else
                                KO.NaturHeilung(-Damage)
                            End If
                        Case DamageUnit.Bombs
                            KO.Bombenregen(Damage)
                    End Select
                End Sub
                Public Overrides Function ToString() As String
                    Return "Massenschaden:" + Damage.ToString + ":" + DamageUnits.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 2
                End Function
            End Class
            Public Class EffectCreateBuilding
                Inherits Effect
                Dim Building As String
                Public Sub New(ByVal Building As String)
                    Me.Building = Building
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.CreateGebäude(Building)
                End Sub
                Public Overrides Function ToString() As String
                    Return "Gebäudeerschaffen:" + Building
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectFireAgain
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.GebäudeNochmalSchießen()
                End Sub
                Public Overrides Function ToString() As String
                    Return "GebäudeNochmalSchießen"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectGetEnemyBuilding
                Inherits Effect
                Dim Number As Integer
                Public Sub New(ByVal Number As Integer)
                    Me.Number = Number
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.StadtÜbernehmen(Number)
                End Sub
                Public Overrides Function ToString() As String
                    Return "StadtÜbernehmen:" + Number.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectIncreaseOwnFonds
                Inherits Effect
                Dim Increase As Single
                Public Sub New(ByVal Increase As Single)
                    Me.Increase = Increase
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    Objektverwalter.Spielfeld.AktuellerSpieler.AddFonds(Objektverwalter.Spielfeld.AktuellerSpieler.Fonds * Increase)
                End Sub
                Public Overrides Function ToString() As String
                    Return "gelderhöhen:" + Increase.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectRation
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.VollRation()
                End Sub
                Public Overrides Function ToString() As String
                    Return "Ration"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectChangeWeather
                Inherits Effect
                Dim Weather As ObjektSpielfeld.Wetterarten
                Dim Time As Integer
                Public Sub New(ByVal Weather As ObjektSpielfeld.Wetterarten, ByVal Time As Integer)
                    Me.Weather = Weather
                    Me.Time = Time
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.WetterÄndern(Weather, Time)
                End Sub
                Public Overrides Function ToString() As String
                    Return "Wetterändern:" + Weather.ToString + ":" + Time.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 2
                End Function
            End Class
            Public Class EffectRocket
                Inherits Effect
                Dim Damage As Integer
                Dim AnimationType As String
                Dim Range As Integer
                Dim Effect As ObjektKO.Effekte
                Dim Buffertime As Integer
                Public Sub New(ByVal Damage As Integer, ByVal AnimationType As String, ByVal Range As Integer, ByVal Effect As ObjektKO.Effekte, ByVal Buffertime As Integer)
                    Me.Damage = Damage
                    Me.AnimationType = AnimationType
                    Me.Range = Range
                    Me.Effect = Effect
                    Me.Buffertime = Buffertime
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Rakete(Damage, AnimationType, Range, Effect, Buffertime)
                End Sub
                Public Overrides Function ToString() As String
                    If String.IsNullOrEmpty(AnimationType) Then AnimationType = ""
                    Return "Rakete:" + Damage.ToString + ":" + AnimationType + ":" + Range.ToString + ":" + Effect.ToString + ":" + Buffertime.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 5
                End Function
            End Class
            Public Class EffectHealCORange
                Inherits Effect
                Dim Heal As Integer
                Public Sub New(ByVal Heal As Integer)
                    Me.Heal = Heal
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    Select Case My.Settings.CommanderWarsGameMoodus
                        Case CommanderWarsGameModi.AdvanceWarsDC, CommanderWarsGameModi.CommanderWars2
                            Dim E As ObjektEinheit = Objektverwalter.Spielfeld.Spieler(KO.Spieler).KOS(0).GetKOEinheit
                            Dim WZeit As Integer = 4
                            If Not E Is Nothing Then
                                'Caulder heilt sich
                                Objektverwalter.ZuFeldgehen(E.X, E.Y)
                                Dim R As Integer = KO.GetKORange()
                                Dim Kreis As Integer(,) = Kreisfunktion(KO.GetKORange)
                                For X = 0 To Kreis.GetLength(0) - 1
                                    For Y = 0 To Kreis.GetLength(1) - 1
                                        If Kreis(X, Y) >= 0 Then
                                            If Objektverwalter.Spielfeld.OnMap(E.X - R + X, E.Y - R + Y) Then
                                                Dim E2 As ObjektEinheit = Objektverwalter.Spielfeld.Einheiten(E.X - R + X, E.Y - R + Y, E.GetMap)
                                                If Not E2 Is Nothing Then
                                                    If E2.Spieler = KO.Spieler Then
                                                        'Sie wird geheilt!
                                                        BackbufferSpiel.AddAnimation("ANDYGABE", WZeit, New Point(E.X - R + X, E.Y - R + Y), True, E.GetMap)
                                                        WZeit += 4

                                                        E2.DoDamage(-Heal)
                                                    End If
                                                End If
                                            End If
                                        End If
                                    Next
                                Next
                            End If
                        Case Else
                            Dim WZeit As Integer = 4
                            For Each Einheit In Objektverwalter.Spielfeld.Einheiten
                                If Not Einheit Is Nothing Then
                                    If Einheit.Spieler = KO.Spieler Then
                                        BackbufferSpiel.AddAnimation("ANDYGABE", WZeit, New Point(Einheit.X, Einheit.Y), True, Einheit.GetMap)
                                        WZeit += 4
                                        Einheit.DoDamage(-Heal / 2)
                                    End If
                                End If
                            Next
                    End Select
                End Sub
                Public Overrides Function ToString() As String
                    Return "HeilenKOZone:" + Heal.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectStealAmmoFuel
                Inherits Effect
                Dim Ammo As Boolean
                Dim Fuel As Boolean
                Public Sub New(ByVal Ammo As Boolean, ByVal Fuel As Boolean)
                    Me.Ammo = Ammo
                    Me.Fuel = Fuel
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.MuniTreibrauben(Ammo, Fuel)
                End Sub
                Public Overrides Function ToString() As String
                    Return "TreibMuniStehlen:" + Ammo.ToString + ":" + Fuel.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 2
                End Function
            End Class
            Public Class EffectMoveAgain
                Inherits Effect

                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.NochmalZiehen()
                End Sub
                Public Overrides Function ToString() As String
                    Return "NochmalZiehen"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectGetHalfIncome
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.GetHalfIncome()
                End Sub
                Public Overrides Function ToString() As String
                    Return "HalbesGeld"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectMassDamageMoveStop
                Inherits Effect
                Dim Damage As Integer
                Dim MoveStopLife As Integer
                Public Sub New(ByVal Damage As Integer, ByVal MoveStopLife As Integer)
                    Me.Damage = Damage
                    Me.MoveStopLife = MoveStopLife
                End Sub

                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Lähmungsschaden(Damage, MoveStopLife)
                End Sub
                Public Overrides Function ToString() As String
                    Return "MassenschadenLähmung:" + Damage.ToString + ":" + MoveStopLife.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 2
                End Function
            End Class
            Public Class EffectTownProduction
                Inherits Effect

                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Stadtbauen()
                End Sub
                Public Overrides Function ToString() As String
                    Return "StadtBauen"
                End Function

                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectIncreaseMovementCosts
                Inherits Effect
                Dim Increasment As Integer
                Public Sub New(ByVal Increasment As Integer)
                    Me.Increasment = Increasment
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.HöhereBewegungskosten(Increasment)
                End Sub
                Public Overrides Function ToString() As String
                    Return "HöhereBewegungskosten:" + Increasment.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectDoubleAttack
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Zusatzangriffe()
                End Sub
                Public Overrides Function ToString() As String
                    Return "Zusatzangriffe"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectShockEnemys
                Inherits Effect
                Dim Percent As Integer
                Public Sub New(ByVal Percent As Integer)
                    Me.Percent = Percent
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    If Percent > 0 Then
                        KO.SchockEnemys(Percent)
                    Else
                        KO.Schock()
                    End If
                End Sub
                Public Overrides Function ToString() As String
                    Return "Schock:" + Percent.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectInvasion
                Inherits Effect
                Public Invasion As String()
                Public Sub New(ByVal Invasion As String())
                    Me.Invasion = Invasion
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Invasion(Invasion)
                End Sub
                Public Overrides Function ToString() As String
                    Dim S As String = ""
                    If Invasion IsNot Nothing Then
                        For I = 0 To Invasion.Length - 1
                            If I = Invasion.Length - 1 Then
                                S += Invasion(I)
                            Else
                                S += Invasion(I) + ":"

                            End If
                        Next
                    End If
                    Return "Invasion:" + S
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectNoProduction
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.KeineTruppenBau()
                End Sub
                Public Overrides Function ToString() As String
                    Return "KeinTruppenbau"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectNoRation
                Inherits Effect
                Dim Time As Integer
                Public Sub New(ByVal Time As Integer)
                    Me.Time = Time
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.KeineVersorgung(Time)
                End Sub
                Public Overrides Function ToString() As String
                    Return "KeineRation:" + Time.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectOtherDeffence
                Inherits Effect
                Dim NewDeffence As Integer
                Public Sub New(ByVal NewDeffence As Integer)
                    Me.NewDeffence = NewDeffence
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.AndereDeckung(NewDeffence)
                End Sub
                Public Overrides Function ToString() As String
                    Return "AndereDeckung:" + NewDeffence.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectStealPower
                Inherits Effect
                Dim Fonds As Integer
                Public Sub New(ByVal Fonds As Integer)
                    Me.Fonds = Fonds
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Gabenraub(Fonds)
                End Sub
                Public Overrides Function ToString() As String
                    Return "Gabenraub:" + Fonds.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectParatroopers
                Inherits Effect
                Dim Unit As String
                Dim LifePoints As Integer
                Dim Animation As String
                Public Sub New(ByVal Unit As String, ByVal LifePoints As Integer, ByVal Animation As String)
                    Me.Unit = Unit
                    Me.LifePoints = LifePoints
                    Me.Animation = Animation
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Fallschrimspringer(Unit, LifePoints, Animation.ToUpper)
                End Sub
                Public Overrides Function ToString() As String
                    If String.IsNullOrEmpty(Unit) Then Unit = ""
                    If String.IsNullOrEmpty(Animation) Then Animation = ""
                    Return "Fallschrimspringer:" + Unit.ToString + ":" + LifePoints.ToString + ":" + Animation
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 3
                End Function
            End Class
            Public Class EffectCaptureDown
                Inherits Effect
                Dim CapturePoints As Integer
                Public Sub New(ByVal CapturePoints As Integer)
                    Me.CapturePoints = CapturePoints
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Besetzungsniedergang(CapturePoints)
                End Sub
                Public Overrides Function ToString() As String
                    Return "Besetzungsniedergang:" + CapturePoints.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectMoneyhealing
                Inherits Effect
                Dim KampfverstärkungfürmehrHeilung As Integer
                Dim Heal As Integer
                Public Sub New(ByVal KampfverstärkungfürmehrHeilung As Integer, ByVal Heal As Integer)
                    Me.KampfverstärkungfürmehrHeilung = KampfverstärkungfürmehrHeilung
                    Me.Heal = Heal
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Geldheilung(Heal, KampfverstärkungfürmehrHeilung)
                End Sub
                Public Overrides Function ToString() As String
                    Return "Geldheilung:" + KampfverstärkungfürmehrHeilung.ToString + ":" + Heal.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 2
                End Function
            End Class
            Public Class EffectLifeDown
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Lebensabrundung()
                End Sub
                Public Overrides Function ToString() As String
                    Return "Lebensabrundung"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectNoOwnLifePoints
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.KeinTPSehungEigene()
                End Sub
                Public Overrides Function ToString() As String
                    Return "KeinTPSehungEigene"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectNoEnemyLifePoints
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.KeinTPSehungEigene()
                End Sub
                Public Overrides Function ToString() As String
                    Return "KeinTPSehungFeinde"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectOnlyInfiAttack
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.KeinAngriffAußerInfanterie()
                End Sub
                Public Overrides Function ToString() As String
                    Return "KeinAngriffaußerInfanterie"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectNoPower
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.KeinGabeEinsatz()
                End Sub
                Public Overrides Function ToString() As String
                    Return "KeinGabeeinsatz"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectActiveFogOfWar
                Inherits Effect
                Dim Time As Integer
                Public Sub New(ByVal Time As Integer)
                    Me.Time = Time
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.ActivateKriegsnebel(Time)
                End Sub
                Public Overrides Function ToString() As String
                    Return "ActivateKriegsnebel:" + Time.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectSetEnemyVisionRange
                Inherits Effect
                Dim Time As Integer
                Public Sub New(ByVal Time As Integer)
                    Me.Time = Time
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.SetEnemyVisionRange(Time)
                End Sub
                Public Overrides Function ToString() As String
                    Return "SetEnemyVisionRange:" + Time.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectSetEnemyLuckandCurse
                Inherits Effect
                Dim Luck As Integer
                Dim Curse As Integer
                Public Sub New(ByVal Luck As Integer, ByVal AntiLuck As Integer)
                    Me.Luck = Luck
                    Me.Curse = Curse
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.SetEnemyLuckandCurse(Luck, Curse)
                End Sub
                Public Overrides Function ToString() As String
                    Return "SetEnemyLuckAndCurse:" + Luck.ToString + ":" + Curse.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 2
                End Function
            End Class
            Public Class EffectNoPowerCharge
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.KeinGabeleisteAuffüllung()
                End Sub
                Public Overrides Function ToString() As String
                    Return "KeinGabeleisteAuffüllung"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectMoneyForCapturePoints
                Inherits Effect
                Dim CapturePoints As Single
                Public Sub New(ByVal CapturePoints As Single)
                    Me.CapturePoints = CapturePoints
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.WenigerEinahmendurchBesetzungszahl(CapturePoints)
                End Sub
                Public Overrides Function ToString() As String
                    Return "WenigerEinahmendurchBesetzungszahl:" + CapturePoints.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Shared Function GetEffect(ByVal EffectName As String, ByVal Value1 As Object, ByVal Value2 As Object, ByVal Value3 As Object, ByVal Value4 As Object, ByVal Value5 As Object) As Effect
                Select Case EffectName
                    Case "Capture Restart", "BesetzungsRestart"
                        Return New EffectCaptureRestart
                    Case "Get Half Income", "HalbesGeld"
                        Return New EffectGetHalfIncome
                    Case "Get Half Money", "HalbesEinkommen"
                        Return New EffectGetHalfMoney
                    Case "No Income", "KeinEinkommen"
                        Return New EffectNoIncome
                    Case "Make Neutral", "NeutralMachen"
                        Return New EffectMakeNeutral(Value1)
                    Case "Get Neutral Money", "NeutralesGeld"
                        Return New EffectGetNeutralMoney(Value1)
                    Case "Mass Damage", "Massenschaden"
                        Return New EffectMassDamage(Value1, Value2)
                    Case "Mass Damage Move Stop", "MassenschadenLähmung"
                        Return New EffectMassDamageMoveStop(Value1, Value2)
                    Case "Create Building", "Gebäudeerschaffen"
                        Return New EffectCreateBuilding(Value1)
                    Case "Fire Again", "GebäudeNochmalSchießen"
                        Return New EffectFireAgain
                    Case "Get Enemy Building", "StadtÜbernehmen"
                        Return New EffectGetEnemyBuilding(Value1)
                    Case "Increase Own Fonds", "gelderhöhen"
                        Return New EffectIncreaseOwnFonds(Value1)
                    Case "Ration", "Ration"
                        Return New EffectRation
                    Case "Change Weather", "Wetterändern"
                        Return New EffectChangeWeather(Value1, Value2)
                    Case "Rocket", "Rakete"
                        Return New EffectRocket(Value1, Value2, Value3, Value4, Value5)
                    Case "Heal CO Range", "HeilenKOZone"
                        Return New EffectHealCORange(Value1)
                    Case "Steal Ammo Fuel", "TreibMuniStehlen"
                        Return New EffectStealAmmoFuel(Value1, Value2)
                    Case "Move Again", "NochmalZiehen"
                        Return New EffectMoveAgain
                    Case "Town Production", "StadtBauen"
                        Return New EffectTownProduction
                    Case "Increase Movement Costs", "HöhereBewegungskosten"
                        Return New EffectIncreaseMovementCosts(Value1)
                    Case "Double Attack", "Zusatzangriffe"
                        Return New EffectDoubleAttack
                    Case "Shock Enemys", "Schock"
                        Return New EffectShockEnemys(Value1)
                    Case "Invasion", "Invasion"
                        Return New EffectInvasion(Value1)
                    Case "NoProduction", "KeinTruppenbau"
                        Return New EffectNoProduction
                    Case "No Ration", "KeineRation"
                        Return New EffectNoRation(Value1)
                    Case "Other Deffence", "AndereDeckung"
                        Return New EffectOtherDeffence(Value1)
                    Case "Steal Power", "Gabenraub"
                        Return New EffectStealPower(Value1)
                    Case "Paratroopers", "Fallschrimspringer"
                        Return New EffectParatroopers(Value1, Value2, Value3)
                    Case "Capture Down", "Besetzungsniedergang"
                        Return New EffectCaptureDown(Value1)
                    Case "Moneyhealing", "Geldheilung"
                        Return New EffectMoneyhealing(Value1, Value2)
                    Case "Life Down", "Lebensabrundung"
                        Return New EffectLifeDown
                    Case "No Own Life Points", "KeinTPSehungEigene"
                        Return New EffectNoOwnLifePoints
                    Case "No Enemy Life Points", "KeinTPSehungFeinde"
                        Return New EffectNoEnemyLifePoints
                    Case "Only Infantry Attack", "KeinAngriffaußerInfanterie"
                        Return New EffectOnlyInfiAttack
                    Case "No Power", "KeinGabeeinsatz"
                        Return New EffectNoPower
                    Case "Active Fog Of War", "ActivateKriegsnebel"
                        Return New EffectActiveFogOfWar(Value1)
                    Case "Set Enemy Vision Range", "SetEnemyVisionRange"
                        Return New EffectSetEnemyVisionRange(Value1)
                    Case "Set Enemy Luck and Curse", "SetEnemyLuckAndCurse"
                        Return New EffectSetEnemyLuckandCurse(Value1, Value2)
                    Case "No Power Charge", "KeinGabeleisteAuffüllung"
                        Return New EffectNoPowerCharge
                    Case "Money For Capture Points", "WenigerEinahmendurchBesetzungszahl"
                        Return New EffectMoneyForCapturePoints(Value1)
                    Case "No Production"
                        Return New EffectNoProduction
                    Case Else
                        Return Nothing
                End Select
            End Function
        End Class
        Public Sub WritePower(ByVal StrR As IO.StreamWriter)
            StrR.WriteLine("Teurungsrate:" + Teurungsrate.ToString)
            StrR.WriteLine("Gebäudeheilung:" + GebäudeHeilung.ToString)
            StrR.WriteLine("Reichweite:" + Reichweite.ToString)
            StrR.WriteLine("Besetzer:" + Besetzer.ToString)
            StrR.WriteLine("Glück:" + Glück.ToString)
            StrR.WriteLine("Pech:" + Pech.ToString)
            StrR.WriteLine("BonusGeldproGebäude:" + BonusGeldproGebäude.ToString)
            StrR.WriteLine("SpritsenkungLuft:" + SpritsenkungLuft.ToString)
            StrR.WriteLine("SpritsenkungSee:" + SpritsenkungSee.ToString)
            StrR.WriteLine("LandschaftsStärke:" + LandschaftsStärke.ToString)
            StrR.WriteLine("LandschaftsUntergrund:" + ToSTR(LandschaftsUntergrund))
            StrR.WriteLine("Offensivstärke:" + OffensivStärke.ToString)
            StrR.WriteLine("Deffensivstärke:" + DeffensivStärke.ToString)
            StrR.WriteLine("Verstecker:" + Verstecker.ToString)
            StrR.WriteLine("WetterBonus:" + Wetterbouns.ToString)
            StrR.WriteLine("Wetter:" + Wetter.ToString)
            StrR.WriteLine("Bewegungssenker:" + ToSTR(Bewegunssenker))
            StrR.WriteLine("BewegungsWetter:" + ToSTR(Bewegungswetter))
            StrR.WriteLine("WetterReichweitenbonus:" + ToSTR(Bewegungswetter))
            StrR.WriteLine("WetterartFürSenker:" + ToSTR(Bewegungswetter))
            StrR.WriteLine("Sendeturmstärke:" + SendeTurmStärke.ToString)
            StrR.WriteLine("Zusatzdeffensive:" + Zusatzdeffensive.ToString)
            StrR.WriteLine("Gabenfüller:" + Gabenfüller.ToString)
            StrR.WriteLine("Geldraub:" + Geldraub.ToString)
            StrR.WriteLine("Geldstärke:" + Geldstärke.ToString)
            StrR.WriteLine("Deckungsänderung:" + DeckungsÄnderung.ToString)
            StrR.WriteLine("Zusatzoffensive:" + Zusatzoffensive.ToString)
            StrR.WriteLine("MoveAndFire:" + MoveandFire.ToString)
            StrR.WriteLine("Sichtbonus:" + Sichtbonus.ToString)
            StrR.WriteLine("DoppelAngriff:" + DoppelAngriff.ToString)
            StrR.WriteLine("KeinGegenSchaden:" + KeinGegenSchaden.ToString)
            StrR.WriteLine("Kampfbonus:" + Kampfbonus.ToString)
            StrR.WriteLine("StärkebonusProEinheit:" + StärkebonusproEinheit.ToString)
            StrR.WriteLine("Bewegungsbonus:" + Bewegungsbonus.ToString)
            StrR.WriteLine("Kampfverstärker:" + Kampfverstärker.ToString)
            StrR.WriteLine("FireAndMove:" + FireandMove.ToString)
            StrR.WriteLine("Maximalschaden:" + Maximalschaden.ToString)
            StrR.WriteLine("GegenFeuerkraft:" + GegenFeuerkraft.ToString)
            StrR.WriteLine("Lebensentzug:" + Lebensentzug.ToString)
            StrR.WriteLine("GenauesLebenAnzeigen:" + GenauesLebenAnzeigen.ToString)
            StrR.WriteLine("NachBauZiehen:" + NachBauZiehen.ToString)
            StrR.WriteLine("Bergbonus:" + Bergbonus.ToString)
            StrR.WriteLine("Gruppenboost:" + GruppenBoost(0).ToString + "|" + GruppenBoost(1).ToString)
            StrR.WriteLine("RiffWaldSchauer:" + RiffWaldSchauer.ToString)
            StrR.WriteLine("GeldFürEigenschaden:" + GeldFürEigenSchaden.ToString)
            StrR.WriteLine("Minenstärke:" + Minenstärke.ToString)
            StrR.WriteLine("ErhöhtergegenschadenbeieigenSchaden:" + ErhöhterGegenschadenbeiEigenSchaden.ToString)
            StrR.WriteLine("ATKDEFBoostdurchZerstörung:" + ATKundKostensteigererfürFonds.ToString)
            StrR.WriteLine("KeinAngriffmitBilligerenTruppen:" + KeinAngriffmitBilligerenTruppen.ToString)
            StrR.WriteLine("MaxglückbeiZerstörung:" + MaxGlückbeiZerstörung.ToString)
            StrR.WriteLine("ZusätlicheKampfschwächeproTP:" + ZusätlicheKampfschwächeproTP.ToString)
            StrR.WriteLine("ImmerMaxGlück:" + ImmerMaxGlück.ToString)
            StrR.WriteLine("AuflandschaftsStärke:" + AufLandschaftsStärke.ToString)
            StrR.WriteLine("auflandschaftsuntergrund:" + ToSTR(AufLandschaftsUntergrund))
            StrR.WriteLine("FesterZusatzschadenUndDeffensive:" + FesterZusatzschadenUndDeffensive.ToString)
            StrR.WriteLine("MehrEinkommen:" + MehrEinkommen.ToString)
            StrR.WriteLine("FeuerstärkeproFeindlicherDeckung:" + FeuerstärkeproFeindlicherDeckung.ToString)
            StrR.WriteLine("ATKHochfürSchwacheGegner:" + ATKHochfürSchwacheGegner.ToString)
            StrR.WriteLine("NeueBewegungskosten:" + ToSTR(NeueBewegungskosten))
            StrR.WriteLine("BewegungskostenUntergrund:" + ToSTR(BewegungskostenUntergrund))
            StrR.WriteLine("Schadensflug:" + Schadensflug.ToString)
            StrR.WriteLine("Lähmschaden:" + Lähmschaden.ToString)
            StrR.WriteLine("KampfSchadenHeilung:" + KampfSchadenHeilung.ToString)
            StrR.WriteLine("ATKDEFBoostdurchZerstörung:" + ATKDEFBoostdurchZerstörung.ToString)
            StrR.WriteLine("AnyUnitKampfverstärker:" + AnyUnitKampfverstärker.ToString)
            StrR.WriteLine("NochMalZiehenUndKampfänderNachZerstörung:" + NochMalZiehenUndKampfänderNachZerstörung.ToString)
            StrR.WriteLine("GabeleistenVerstecker:" + GabeleistenVerstecker.ToString)
            StrR.WriteLine("FallenAngriff:" + FallenAngriff.ToString)
            StrR.WriteLine("KeineFondsInfos:" + KeineFondsInfos.ToString)
            StrR.WriteLine("ReperaturVerbotNachKampf:" + ReperaturVerbotNachKampf.ToString)
            StrR.WriteLine("BesetzungsbonusNachEinheitenZerstörung:" + BesetzungsbonusNachEinheitenZerstörung.ToString)
            StrR.WriteLine("BewegungsKostenÄnderungNachZerstörung:" + BewegungsKostenÄnderungNachZerstörung.ToString)
            Dim S As String = ""
            For I = 0 To BonusEinheiten.Length - 1
                If I = BonusEinheiten.Length - 1 Then
                    S += BonusEinheiten(I).ToString
                Else
                    S += BonusEinheiten(I).ToString + "|"
                End If
            Next

            StrR.WriteLine("BonusEinheiten:" + S)
            StrR.WriteLine("radioaktivestärke:" + RadioaktiveStärke.ToString)
            StrR.WriteLine("feldtarnungsreichweite:" + FeldtarnungsReichweite.ToString)
            S = ""
            For I = 0 To LandschaftsVertauschung.Length - 1
                If I = LandschaftsVertauschung.Length - 1 Then
                    S += LandschaftsVertauschung(I, 0) + "_" + LandschaftsVertauschung(I, 1)
                Else
                    S += LandschaftsVertauschung(I, 0) + "_" + LandschaftsVertauschung(I, 1) + "|"
                End If
            Next
            StrR.WriteLine("LandschaftsVertauschung:" + S)
            StrR.WriteLine("NahkampfReichweitenBonus:" + NahkampfReichweitenBonus.ToString)
            StrR.WriteLine("RepairON:" + RepairON.ToString)
            StrR.WriteLine("Baugebäude:" + Baugebäude.ToString)
            StrR.WriteLine("FeuerVerlustbeiKP:" + FeuerVerlustbeiKP.ToString)
            StrR.WriteLine("GebäudeZusatzSchaden:" + GebäudeZusatzSchaden.ToString)
            StrR.WriteLine("SpriteVertauschung:" + SpriteVertauschung.ToString)
            StrR.WriteLine("Wetterimmunität:" + ToSTR(Wetterimmunität))
            If ThisPowerScript IsNot Nothing Then
                ThisPowerScript.WritePowerScript(StrR)
            End If
            StrR.WriteLine("PowerEnde")
        End Sub
    End Class
End Class
<Serializable()> Public Class KOBeschreibungCustom
    Inherits ObjektKOBeschreibung
    Public Sub New()
        Name = "Custom CO"
        Fein = "Custom"
        Nein = "Nothing Custom"
        Beschreibung = New String() {"A custom CO."}
        Stil = New String() {"Don't know the way he was created."}
        Gabebeschreibung = New String() {"Something custom."}
        SpezialgabeBeschreibung = New String() {"I don't know."}
        GabeKosten = 3
        Spezialgabekosten = 3
        Gaben = New String() {"Custom 1", "Custom 2"}
        Synergie = New Decimal() {}
        KONamen = New String() {}
        Doppelgabenamen = New String() {}
        Gabesätze = New String() {"Don't know say something"}
        Siegsätze = New String() {"You win with a Custom CO boring."}
        Tauschsätze = New String() {"Beware i'm Custom."}
        Doppelgabesätze = New DoppelGabesatz() {}
    End Sub
End Class
